<?
/*
-------------------------------
Script - EvaGb
-------------------------------
File - gb_class.php
-------------------------------
Function - Класс контроллер
-------------------------------
*/

########################
# Configs
########################

// Настройки в файле config.php

########################
# Init
########################

include_once $GLOBALS['_gb_cnf']['dir']."/sis/inc/support_inc.php";

function __autoload($class_name) {
     include_once("{$GLOBALS['_gb_cnf']['dir']}/sis/classes/".$class_name . ".class.php");
}
########################

class gb {
  public  $result;
  private $case,$tpl;
  function __construct() {
      $this->case=new casy();
      $this->result=array();
      $this->tpl=locator::get()->tpl();
      $_SESSION['_gb_nospam']=!$_SESSION['_gb_nospam']?1:$_SESSION['_gb_nospam'];
      $this->case->debug();
  }
  function display_gb($return=1) {
      $this->tpl->set_global('cnf',$GLOBALS['_gb_cnf']);
      $this->tpl->set_global('is_admin',rights::is_admin());
      if ($this->is_user_add_req()) {
          if ($this->is_post_ok()) {
              if ($this->check_nospam()) {
                $this->case->add_msg();
              }else {
                $this->case->add_update_msg();
              }
          }
        $this->get_content();
      }else if ($this->is_user_search_req()) {
           if ($this->norm_search_req()) {
               if (!$this->case->search()) {
                   $this->result=$this->case->result;
                   $this->get_content();
               } else {
                   $this->result=$this->case->result;
               }
           }else {
             $this->get_content();
           }
      }else {
         $this->get_content();
      }
      $_SESSION['page_refer']=$_SERVER['REQUEST_URI'];
      if ($return) {
          return display::result($this->result);
      }else {
          print display::result($this->result);
      }

  }
  private function check_nospam() {
      $pid=$this->case->get_past_id();
      if(time()-$_SESSION['_gb_nospam']['time']>=$GLOBALS['_gb_cnf']['no_spam_time']
        || trim($_SESSION['_gb_nospam']['id'])!==trim($pid)
        || !$pid) {
          return true;
      } else {
          return false;
      }
  }
  private function norm_search_req() {
      if ($GLOBALS['_gb_cnf']['min_searchlen'] && strlen($_GET['search'])<=$GLOBALS['_gb_cnf']['min_searchlen']) {
          $this->result['error'].=display::info("Ошибка: Длина запроса должна быть не короче {$GLOBALS['_gb_cnf']['min_searchlen']} символов");
          return false;
      }
      return true;
  }
  private function is_user_search_req() {
      if (isset($_POST['search'])) {
          header("Location: {$_SERVER['PHP_SELF']}?search=".rawurlencode($_POST['search']));
          die();
      }
      if (isset($_GET['search'])) {
          $_GET['search']=rawurldecode($_GET['search']);
          return true;
      }
      return false;
  }
  private function get_content() {
      $this->result['content']=$this->case->get_content();
       if ($this->can_he_add()) {
           $this->result['form']=$this->case->get_form();
       }else {
           $this->result['form']=display::info("Ошибка: Вам запрещено добавлять сообщения");
       }
      $this->result['page']=$this->case->get_page();
      $this->result['error'].=$this->case->error;
  }
  private function is_post_ok() {
     if (!emptypost("name,text".($GLOBALS['_gb_cnf']['noempty']?",".implode(',',$GLOBALS['_gb_cnf']['noempty']):""))) {
         if ($_SESSION['_img_code']==$_POST['img'] || !$GLOBALS['_gb_cnf']['useimg']) {
            if ($this->can_he_add()) {
               if($this->check_regexp()) {
                  if($this->check_badname()) {
                    if (!$this->check_in_admarr() || $GLOBALS['_gb_cnf']['useadmname'] || rights::is_admin()) {
                        return true;
                    }else {
                        $this->result['error']=display::info("Ошибка: Запрещено использовать имена администраторов");
                    }
                  }else {
                    $this->result['error']=display::info("Ошибка: Имя содержит запрешённые символы");
                  }
               }
            }else {
                $this->result['error']=display::info("Ошибка: Вам запрещено добавлять сообщения");
            }
         }else {
            $_SESSION['_img_code']=md5(rand(123,999));
            $this->result['error']=display::info("Ошибка: Код с картинки введён неверно");
         }
     }else {
         $this->result['error']=display::info("Ошибка: Обязательные поля нужно заполнить");
     }
     return false;
  }
  private function check_in_admarr() {
      $adm=$GLOBALS['_gb_cnf']['admins'];
      for($i=0,$c=count($adm);$i<$c;$i++) {
          if (strtolower($adm[$i]['login'])==strtolower($_POST['name'])) return true;
      }
      return false;
  }
  private function check_badname(){
      if ($GLOBALS['_gb_cnf']['badname'] && preg_match($GLOBALS['_gb_cnf']['badname'],$_POST['name'])) {
          return false;
      }
      return true;
  }
  private function check_regexp() {
      foreach($GLOBALS['_gb_cnf']['regexp'] as $key=>$val) {
          if (!preg_match($val['regexp'],$_POST[$key])) {
              $this->result['error'].=display::info($val['error']);
              return false;
          }
      }
      return true;
  }
  private function can_he_add() {
     if (!$this->case->is_banned()) {
         return true;
     }
     return false;
  }
  private function is_user_add_req() {
      if (issetpost("name,text")) {
              return true;
          }else {
              return false;
          }
  }
}
?>
